<?php


namespace App\Http\Controllers\Auth;


use App\Models\Admin\Admin;
use App\Models\Business\Business;
use Illuminate\Http\Request;
use Validator;
class AdminController
{
    /**
     * @group 后台管理员密码登录逻辑
     *
     *
     * 返回状态码对应消息
     *
     * 400 参数错误
     * 411 未上传密码
     * 412 没有对应管理员
     * 413 密码错误
     * 200 登陆成功 并且返回的内容是token 可以直接进行会话
     *
     * @bodyParam number int required 手机号/账号
     * @bodyParam pwd string optional 密码
     */
    function AdminLogin(Request $request){
        if(!$request->has('pwd')){
            return response()->json('提交密码来登录',411);
        }
        //数据验证
//        $validator = Validator::make($request->all(),genValidate());
//        if($validator->fails()){
//            return response()->json($validator->errors()->messages(),400);
//        }
        $phone = $request->get('number');
        if(!self::validateAdmin($phone)){
            return response()->json('没有对应管理员',412);
        }

        $user=Admin::where('number','=',$phone)->first();
//        if($request->has('code')){
//            $time = $user->login_code_time;
//            //查看验证码是否过期
//            if(!self::validateCodeTime($time)){
//                return response()->json('验证码已经失效 请重新发送',413);
//            };
//            $code = (string) $user->login_code;
//            if(! ($code ===(string) $request->input('code','xxxx'))){
//                return response()->json('验证码错误',414);
//            }
//            return response()->json(JwtToken::genAdminToken($user),200);
//        }
        if($request->has('pwd')){
            if ($request->get('pwd') == $user['password']){
                return response()->json(JwtToken::genAdminToken($user),200);
            }else{
                return response()->json('管理员密码错误',413);
            }
        }

    }
    //判断后台管理员是否已经审核通过了
    static private function validateAdmin($phone)
    {
        return Admin::where('number','=',$phone)->exists();
    }
    //验证验证码是否过期 true未过期 false 过期了
    static private function validateCodeTime($time)
    {
        $res = strtotime($time) + JwtToken::getCodeExpireTime() - time();
        if($res > 0){
            return $res;
        }
        return false;
    }
    /**
     * @group 后台管理员短信或密码忘记密码逻辑->验证码短信验证码修改密码模式
     *
     *
     * 返回状态码对应消息
     *
     * 400 参数错误
     * 411 没有提交值
     * 412 没有新密码
     * 413 该商家不存在
     * 414 验证码已经失效 请重新发送
     * 415 验证码错误
     * 416 修改密码失败
     * 200 修改成功
     *
     * @bodyParam phone int required 手机号
     * @bodyParam code int optional 验证码
     * @bodyParam pwd string optional 密码
     */
    public function Adminforget(Request $request){

        $phone = $request->get('phone');
        $code = $request->get('code');
        $pwd = $request->get('pwd');
        //数据验证
//        $validator = Validator::make($request->all(),genValidate());
//        if($validator->fails()){
//            return response()->json($validator->errors()->messages(),400);
//        }
        if(!$code){
            return response()->json('没有提交值',411);
        }
        if(!$pwd){
            return response()->json('没有新密码',412);
        }
        if(!self::validateAdmin($phone)){
            return response()->json('该后台管理员不存在',413);
        }
        $user = Admin::where('phone','=',$phone)->first();
        if($request->has('code')){
            $time = $user->login_code_time;
            //查看验证码是否过期
            if(!self::validateCodeTime($time)){
                return response()->json('验证码已经失效 请重新发送',414);
            };
            $code = (string) $user->login_code;
            if(! ($code ===(string) $request->input('code','xxxx'))){
                return response()->json('验证码错误',415);
            }
            $user->password = $pwd;
            $user->save();
            return response()->json('修改密码成功',200);
        }
    }
    //生成一串验证码
    static function genCode(int $len=6,bool $isNumber=true){
        $code = "";
        if($isNumber){
            for($i=0;$i<$len;$i++){
                $code .= (string) random_int(1,9);
            }
        }
        return $code;
    }
    /**
     * @group 商家短信验证码->忘记密码或登录前发送短信验证码接口
     *
     *
     * 返回状态码对应消息
     *
     * 400 参数错误
     * 411 用户已经被注册了不能发送验证码
     * 412 验证码要在xx间隔之后才能再重新发送
     * 413 没有该商家
     * 200 验证码发送成功 请用户查收
     *
     * @bodyParam phone int required 手机号
     */
    function MsgCode(Request $request){
        //数据验证
//        $validator = Validator::make($request->all(),genValidate());
//        if($validator->fails()){
//            return response()->json($validator->errors()->messages(),400);
//        }
        $phone = $request->get('phone');
        $code = self::genCode();
        $now = date("Y-m-d H:i:s");
        //判断商家是否已经存在了
        if(self::validateAdmin($phone)){
            $user = Admin::where('phone','=',$phone)->first();
            $time = $user->login_code_time;
            //判断验证码是否已经过期了 过期了就可以重新发送
            if(self::validateCodeTime($time))
            {
                $dTime = self::validateCodeTime($time);
                return response()->json("验证码已经发送了 请于{$dTime}秒之后再试",412);
            }else{
                $user->login_code_time = $now;
                $user->login_code  = $code;
                $user->save();
                return response()->json("验证码发送成功",200);
            }
        }else{
            return response()->json("没有该后台管理员",413);
        }
    }
}
